package top.luckyluxcis.api;

import lombok.experimental.UtilityClass;
import top.luckyluxcis.RollApi;
import top.luckyluxcis.type.Dictionary;
import top.luckyluxcis.type.History;
import top.luckyluxcis.type.JokeResult;
import top.luckyluxcis.type.Recommend;
import top.luckyluxcis.util.MapUtil;

import java.util.List;
import java.util.Map;

/**
 * @author Zhuang
 * @since 2023/9/25
 */
@SuppressWarnings("unused")
@UtilityClass
public class DictionaryUtil {
    private static final RollApi API = RollApi.getInstance();

    /**
     * 简体与繁体的相互转换
     *
     * @param toTraditional 是否简体转繁体
     * @param content       内容
     */
    public static Dictionary.ConvertInfo convertChinese(Boolean toTraditional, String content) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("toTraditional", toTraditional ? 1 : 2)
                .put("content", content)
                .build();
        return API.get("/convert/zh", params, Dictionary.ConvertInfo.class);
    }

    /**
     * 查询单个汉字的读音和含义
     *
     * @param content 被查询的汉字内容
     * @return {@link Dictionary}
     */
    public static Dictionary dictionary(String content) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("content", content)
                .build();
        return API.get("/convert/dictionary", params, Dictionary.class);
    }

    /**
     * 分页获取笑话段子列表，目前只开放纯文本段子，后期看情况开放搞笑短视频和搞笑图片的接口。
     *
     * @param page 分页
     * @return {@link JokeResult}
     */
    public static JokeResult jokeList(Integer page) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("page", page)
                .build();
        return API.get("/jokes/list", params, JokeResult.class);
    }

    /**
     * 随机获取笑话段子列表，目前只开放纯文本段子，后期看情况开放搞笑短视频和搞笑图片的接口。
     *
     * @return {@link List}<{@link JokeResult.Joke}>
     */
    public static List<JokeResult.Joke> jokeListRandom() {
        return API.get("/jokes/list/random", MapUtil.empty(), List.class);
    }

    /**
     * 获取已经收录的历史上的今天的所有数据。
     *
     * @param detail 是否需要详情
     * @return {@link List}<{@link History}>
     */
    public static List<History> today(boolean detail) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("type", detail ? 1 : 0)
                .build();
        return API.get("/history/today", params, List.class, History.class);
    }

    /**
     * 每日推荐精美语句。
     *
     * @param count 被查询的语句条数，范围【1~20】
     * @return {@link List}<{@link History}>
     */
    public static List<Recommend> recommend(int count) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("count", count)
                .build();
        return API.get("/daily_word/recommend", params, List.class, Recommend.class);
    }
}
